#ifndef AST_HEADER
#define AST_HEADER
#include "platdep.h"
#include "Absyn.h"

typedef struct NODE
{
    int nodeIndex;
    char *name;
    bool  node_type; 
	MINEOPERATOR optr;
	NODE *value;
}NODE;



void visitStatement(Statement p);
void visitQuery(Query p);
void visitSpecifier(Specifier p);
void visitProjection_list(Projection_list p);
void visitProjection(Projection p);
void visitReference(Reference p);
void visitColumn_Reference(Column_Reference p);
void visitFunction_Reference(Function_Reference p);
void visitFunction(Function p);
void visitDot(Dot p);
void visitVariable_declaration_list(Variable_declaration_list p);
void visitVariable_declaration(Variable_declaration p);
void visitOptional_Where_Clause(Optional_Where_Clause p);
void visitCondition(Condition p);
void visitPredicate(Predicate p);
void visitComparison_Predicate(Comparison_Predicate p);
void visitIn_Predicate(In_Predicate p);
void visitBetween_Predicate(Between_Predicate p);
void visitLike_Predicate(Like_Predicate p);
void visitExists_Predicate(Exists_Predicate p);
void visitAtom_List(Atom_List p);
void visitNested_Query(Nested_Query p);
void visitScalar_Exp(Scalar_Exp p);
void visitAtom(Atom p);
void visitComparison(Comparison p);
void visitOptional_Group_By_Clause(Optional_Group_By_Clause p);
void visitOptional_Having_Clause(Optional_Having_Clause p);
void visitOptional_Order_By_Clause(Optional_Order_By_Clause p);
void visitColumn_Reference_List(Column_Reference_List p);
void visitColumn_Reference_Ordering_List(Column_Reference_Ordering_List p);
void visitColumn_Reference_Ordering(Column_Reference_Ordering p);
void visitOptional_Ordering(Optional_Ordering p);

void visitSelect(SELECT p);void visitFrom(FROM p);void visitDistinct(DISTINCT p);void visitWhere(WHERE p);void visitAs(AS p);void visitMod(MOD p);void visitNot(NOT p);void visitAnd(AND p);void visitOr(OR p);void visitIn(IN p);void visitLike(LIKE p);void visitBetween(BETWEEN p);void visitExists(EXISTS p);void visitSum(SUM p);void visitMax(MAX p);void visitMin(MIN p);void visitAvg(AVG p);void visitCount(COUNT p);void visitGroup(GROUP p);void visitBy(BY p);void visitOrder(ORDER p);void visitHaving(HAVING p);void visitAsc(ASC p);void visitDesc(DESC p);void visitIdentifier(IDENTIFIER p);void visitInvalid(INVALID p);void visitSc(SC p);
void visitIdent(Ident i);
void visitInteger(Integer i);
void visitDouble(Double d);
void visitChar(Char c);
void visitString(String s);

#endif

